package com.ly.jwt.config;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * 权限注解
 * 1、RetentionPolicy.SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
 * 2、RetentionPolicy.CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期；
 * 3、RetentionPolicy.RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
 *
 * @Target 说明了Annotation所修饰的对象范围：（指定下面的注解能修饰什么）
 * Annotation可被用于 packages、types（类、接口、枚举、Annotation类型）、
 * 类型成员（方法、构造方法、成员变量、枚举值）、方法参数和本地变量（如循环变量、catch参数）。
 * 在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
 * 1.CONSTRUCTOR:用于描述构造器
 * 2.FIELD:用于描述域
 * 3.LOCAL_VARIABLE:用于描述局部变量
 * 4.METHOD:用于描述方法
 * 5.PACKAGE:用于描述包
 * 6.PARAMETER:用于描述参数
 * 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
 */
@Retention(RetentionPolicy.RUNTIME)
//适用类、接口（包括注解类型）或枚举,适用方法
@Target({ElementType.TYPE, ElementType.METHOD})
//@interface自定义注解
public @interface RolePermission {
    /**
     * @return boolean
     * @introduction: 登录权限
     * @date 2021/5/19 22:23
     */
    boolean login() default true;


    /**
     * @return java.lang.String
     * @introduction: 角色权限
     * @date 2021/5/19 22:24
     */
    String role() default "";
}
